import javax.servlet.http.HttpServletRequest;

public class WebUtils {

    public static String getServletPath(HttpServletRequest request) {
        return request.getServletPath();
    }

    public static String getPathWithinServletMapping(HttpServletRequest request) {
        /**
         * request.getServletPath()方法解释：
         *
         * 获取能够与servlet设置的“url-pattern”中匹配的路径，注意是完全匹配的部分，*的部分不包括
         *
         * 官方解释：
         *  返回此请求的URL中调用servlet的部分.
         *  此路径以"/"字符开头，包含servlet名称或到servlet的路径，但不包含任何额外的路径信息或查询字符串.
         *  与CGI变量SCRIPT_NAME的值相同.
         * 其实真实的意思就是，在配置web.xml或编程式配置时，配置了url-pattern，请求的URL与url-pattern的有效部分重合部分就是servletPath，
         * 也可以理解为url-pattern的有效部分就是servletPath.
         *
         * 例如：url-pattern配置为/demo/*，请求URL为http://localhost/Pro/demo/htm/index.html，则servletPath为/demo.
         *
         * 实现的方法见tomcat 源码中
         * @see org.apache.catalina.connector.Request#getServletPath()
         */
        int servletIndex = request.getRequestURI().indexOf(request.getServletPath());
        return request.getRequestURI().substring(servletIndex + request.getServletPath().length());
    }

    /**
     * Return the path within the web application for the given request.
     * @param request current HTTP request
     * @return the path within the web application
     */
    public static String getPathWithinApplication(HttpServletRequest request) {
        return request.getRequestURI().substring(request.getContextPath().length());
    }
}
